package com.example.d6_homework.homework03;

public class Test {
    public static void main(String[] args) {
        // 需求：小姑娘采蘑菇问题,小姑娘第一天摘下若干个蘑菇,当即吃了快一半,还不过瘾,又多吃了一个
        // 第二天又将仅剩下的蘑菇吃掉了一半,又多吃了一个以后每天都吃了前一天剩下的一半多一个到第十天,只剩下一个蘑菇试求第一天共摘了多少蘑菇
        /*
            f(x) = f(x+1)   f(x)表示当天的蘑菇数量  f(x+1)表示后一天的蘑菇数量
            因为后一天的蘑菇数量等于 前一天蘑菇数量总数的一半 在减去 1
            ->  f(x) - f(x) / 2 - 1 = f(x+1)
            ->  2f(x) - f(x) - 2 = 2f(x+1)
            ->  f(x) = 2f(x+1) + 2  ->这个就是公式
         */
        // 方法一：
        System.out.println("第一天共摘了 " + f(1) + " 个蘑菇");

        // 方法二：
        int remainingMushrooms = 1; // 第十天结束时剩下的蘑菇数量
        for (int day = 10; day > 1; day--) {
            remainingMushrooms = (remainingMushrooms + 1) * 2;
        }
        System.out.println("第一天共摘了 " + remainingMushrooms + " 个蘑菇");
    }

    // 使用递归
    public static int f(int x) {
        // 当输入为10时,递归终止,返回1
        if (x == 10) {
            return 1;
        } else {
            // 递归调用,计算f(x + 1)的值,并根据定义的公式返回结果
            // 这里体现了函数的递归特性,即函数调用自身来计算结果
            return 2 * f(x + 1) + 2;
        }
    }
}
